package com.mastercard.assets.web.struts.actions;

import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.web.struts.forms.reporteThree;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class descargaReporteTres extends Action {
    
    public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
    {
        
        reporteThree f = ( reporteThree ) form ;                
        
        OutputStream out = null;
        
        try{
            
            response.setContentType( "application/vnd.ms-excel" ) ;
            response.setHeader( "Content-disposition", "attachment; filename=\"Reporte_3.xls\"" ) ;
            response.setHeader( "Content-type", "application/vnd.ms-excel" ) ;
            
            //ini:formato
            WritableFont cabeceraFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, true);
            WritableFont cuerpoFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false);
            WritableFont domicilioFont = new WritableFont(WritableFont.ARIAL, 9, WritableFont.NO_BOLD, false); 

            WritableCellFormat fCabecera = new WritableCellFormat(cabeceraFont);
            fCabecera.setAlignment(Alignment.JUSTIFY);
            fCabecera.setVerticalAlignment(VerticalAlignment.CENTRE);
            fCabecera.setBackground(Colour.CORAL);
            fCabecera.setBorder(Border.ALL,BorderLineStyle.THIN);

            WritableCellFormat fCuerpo = new WritableCellFormat(cuerpoFont);
            fCuerpo.setAlignment(Alignment.LEFT);
            fCuerpo.setBorder(Border.ALL,BorderLineStyle.THIN);

            WritableCellFormat fCuerpo2 = new WritableCellFormat(domicilioFont);
            fCuerpo2.setAlignment(Alignment.LEFT);
            fCuerpo2.setBorder(Border.ALL,BorderLineStyle.THIN);
            
            //fin:formato
    
            WritableWorkbook w = Workbook.createWorkbook(response.getOutputStream());
            WritableSheet s = w.createSheet("Informe", 0); //Nombre de hoja
            
            s.setColumnView(0,10);//ini:seteamos el ancho de las columnas 
            s.setColumnView(1,20);
            s.setColumnView(2,20);
            s.setColumnView(3,20);
            s.setColumnView(4,25);
            s.setColumnView(5,10);
            s.setColumnView(6,15);
            s.setColumnView(7,15);
            s.setColumnView(8,10);
            s.setColumnView(9,10);
            s.setColumnView(10,30);
            s.setColumnView(11,20);
            s.setColumnView(12,20);
            
            //ini: armando el excel
                s.addCell(new Label(0, 0, "Estatus",fCabecera)); //añadiendo celdas
                s.addCell(new Label(1, 0, "País",fCabecera));
                s.addCell(new Label(2, 0, "CUENTA",fCabecera));
                s.addCell(new Label(3, 0, "BC",fCabecera));
                s.addCell(new Label(4, 0, "Campaña",fCabecera)); //añadiendo celdas
                s.addCell(new Label(5, 0, "Paquetes",fCabecera));
                s.addCell(new Label(6, 0, "Asset",fCabecera));
                
                int j = 0 ;
                for( int i = 0 ; i < f.getCampaniaR3( ).length ; i ++ ){

                    s.addCell( new Label( 0, i + 1, ""+f.getStatus( )[ i ],fCuerpo ) ) ;
                    s.addCell( new Label( 1, i + 1, MCUtil.TextoFormateado( f.getPaisR3( )[ i ]),fCuerpo ) ) ;
                    s.addCell( new Label( 2, i + 1, MCUtil.TextoFormateado( f.getCuentaR3( )[ i ] ),fCuerpo ) );
                    s.addCell( new Label( 3, i + 1, ""+f.getBcR3( )[ i ] ,fCuerpo ) ) ;
                    s.addCell( new Label( 4, i + 1, MCUtil.TextoFormateado( f.getCampaniaR3( )[ i ]),fCuerpo ) ) ;
                    s.addCell( new Label( 5, i + 1, ""+f.getPaquetesR3( )[ i ] ,fCuerpo ) ) ;
                    s.addCell( new Label( 6, i + 1, MCUtil.TextoFormateado( f.getAssetR3( )[ i ] ),fCuerpo ) );
                    
                    j = i + 1 ;
                }
                
                s.addCell(new Label(0, j + 1, "",fCabecera)); //añadiendo celdas
                s.addCell(new Label(1, j + 1, "",fCabecera));
                s.addCell(new Label(2, j + 1, "",fCabecera));
                s.addCell(new Label(3, j + 1, "",fCabecera));
                s.addCell(new Label(4, j + 1, "",fCabecera)); //añadiendo celdas
                s.addCell(new Label(5, j + 1, "",fCabecera));
                s.addCell(new Label(6, j + 1, "Totales",fCabecera));
                
                if( f.getTiporesultadoR3( ) == 1 ){
                    
                    s.addCell( new Label( 0, j + 2, "",fCuerpo ) ) ;
                    s.addCell( new Label( 1, j + 2, "",fCuerpo ) ) ;
                    s.addCell( new Label( 2, j + 2, "",fCuerpo ) ) ;
                    s.addCell( new Label( 3, j + 2, "Enero",fCuerpo ) ) ;
                    s.addCell( new Label( 4, j + 2, "Febrero",fCuerpo ) ) ;
                    s.addCell( new Label( 5, j + 2, "Marzo",fCuerpo ) ) ;
                    s.addCell( new Label( 6, j + 2, "Abril",fCuerpo ) );
                    
                    s.addCell( new Label( 0, j + 3, "",fCuerpo ) ) ;
                    s.addCell( new Label( 1, j + 3, "",fCuerpo ) ) ;
                    s.addCell( new Label( 2, j + 3, "",fCuerpo ) ) ;
                    s.addCell( new Label( 3, j + 3, ""+f.getEnero( ),fCuerpo ) ) ;
                    s.addCell( new Label( 4, j + 3, ""+f.getFebrero( ),fCuerpo ) ) ;
                    s.addCell( new Label( 5, j + 3, ""+f.getMarzo( ),fCuerpo ) ) ;
                    s.addCell( new Label( 6, j + 3, ""+f.getAbril( ),fCuerpo ) );
                    
                    s.addCell( new Label( 0, j + 4, "",fCuerpo ) ) ;
                    s.addCell( new Label( 1, j + 4, "",fCuerpo ) ) ;
                    s.addCell( new Label( 2, j + 4, "",fCuerpo ) ) ;
                    s.addCell( new Label( 3, j + 4, "Mayo",fCuerpo ) ) ;
                    s.addCell( new Label( 4, j + 4, "Junio",fCuerpo ) ) ;
                    s.addCell( new Label( 5, j + 4, "Julio",fCuerpo ) ) ;
                    s.addCell( new Label( 6, j + 4, "Agosto",fCuerpo ) );
                    
                    s.addCell( new Label( 0, j + 5, "",fCuerpo ) ) ;
                    s.addCell( new Label( 1, j + 5, "",fCuerpo ) ) ;
                    s.addCell( new Label( 2, j + 5, "",fCuerpo ) ) ;
                    s.addCell( new Label( 3, j + 5, ""+f.getMayo( ),fCuerpo ) ) ;
                    s.addCell( new Label( 4, j + 5, ""+f.getJunio( ),fCuerpo ) ) ;
                    s.addCell( new Label( 5, j + 5, ""+f.getJulio( ),fCuerpo ) ) ;
                    s.addCell( new Label( 6, j + 5, ""+f.getAgosto( ),fCuerpo ) );
                    
                    s.addCell( new Label( 0, j + 6, "",fCuerpo ) ) ;
                    s.addCell( new Label( 1, j + 6, "",fCuerpo ) ) ;
                    s.addCell( new Label( 2, j + 6, "",fCuerpo ) ) ;
                    s.addCell( new Label( 3, j + 6, "Septiembre",fCuerpo ) ) ;
                    s.addCell( new Label( 4, j + 6, "Octubre",fCuerpo ) ) ;
                    s.addCell( new Label( 5, j + 6, "Noviembre",fCuerpo ) ) ;
                    s.addCell( new Label( 6, j + 6, "Diciembre",fCuerpo ) );
                    
                    s.addCell( new Label( 0, j + 7, "",fCuerpo ) ) ;
                    s.addCell( new Label( 1, j + 7, "",fCuerpo ) ) ;
                    s.addCell( new Label( 2, j + 7, "",fCuerpo ) ) ;
                    s.addCell( new Label( 3, j + 7, ""+f.getSeptiembre( ),fCuerpo ) ) ;
                    s.addCell( new Label( 4, j + 7, ""+f.getOctubre( ),fCuerpo ) ) ;
                    s.addCell( new Label( 5, j + 7, ""+f.getNoviembre( ),fCuerpo ) ) ;
                    s.addCell( new Label( 6, j + 7, ""+f.getDiciembre( ),fCuerpo ) );
                    
                    s.addCell( new Label( 0, j + 8, "",fCuerpo ) ) ;
                    s.addCell( new Label( 1, j + 8, "",fCuerpo ) ) ;
                    s.addCell( new Label( 2, j + 8, "",fCuerpo ) ) ;
                    s.addCell( new Label( 3, j + 8, "",fCuerpo ) ) ;
                    s.addCell( new Label( 4, j + 8, "",fCuerpo ) ) ;
                    s.addCell( new Label( 5, j + 8, "",fCuerpo ) ) ;
                    s.addCell( new Label( 6, j + 8, ""+f.getTotal( ),fCuerpo ) );
                    
                }else
                    if( f.getTiporesultadoR3( ) == 2 ){
                        
                        s.addCell( new Label( 0, j + 2, "",fCuerpo ) ) ;
                        s.addCell( new Label( 1, j + 2, "",fCuerpo ) ) ;
                        s.addCell( new Label( 2, j + 2, "",fCuerpo ) ) ;
                        s.addCell( new Label( 3, j + 2, "Q1",fCuerpo ) ) ;
                        s.addCell( new Label( 4, j + 2, "Q2",fCuerpo ) ) ;
                        s.addCell( new Label( 5, j + 2, "Q3",fCuerpo ) ) ;
                        s.addCell( new Label( 6, j + 2, "Q4",fCuerpo ) );

                        s.addCell( new Label( 0, j + 3, "",fCuerpo ) ) ;
                        s.addCell( new Label( 1, j + 3, "",fCuerpo ) ) ;
                        s.addCell( new Label( 2, j + 3, "",fCuerpo ) ) ;
                        s.addCell( new Label( 3, j + 3, ""+f.getQ1( ),fCuerpo ) ) ;
                        s.addCell( new Label( 4, j + 3, ""+f.getQ2( ),fCuerpo ) ) ;
                        s.addCell( new Label( 5, j + 3, ""+f.getQ3( ),fCuerpo ) ) ;
                        s.addCell( new Label( 6, j + 3, ""+f.getQ4( ),fCuerpo ) );
                        
                        s.addCell( new Label( 0, j + 4, "",fCuerpo ) ) ;
                        s.addCell( new Label( 1, j + 4, "",fCuerpo ) ) ;
                        s.addCell( new Label( 2, j + 4, "",fCuerpo ) ) ;
                        s.addCell( new Label( 3, j + 4, "",fCuerpo ) ) ;
                        s.addCell( new Label( 4, j + 4, "",fCuerpo ) ) ;
                        s.addCell( new Label( 5, j + 4, "",fCuerpo ) ) ;
                        s.addCell( new Label( 6, j + 4, "Total "+f.getTotal( ),fCuerpo ) );
                        
                    }else{
                        
                        s.addCell( new Label( 0, j + 2, "",fCuerpo ) ) ;
                        s.addCell( new Label( 1, j + 2, "",fCuerpo ) ) ;
                        s.addCell( new Label( 2, j + 2, "",fCuerpo ) ) ;
                        s.addCell( new Label( 3, j + 2, "",fCuerpo ) ) ;
                        s.addCell( new Label( 4, j + 2, "",fCuerpo ) ) ;
                        s.addCell( new Label( 5, j + 2, "",fCuerpo ) ) ;
                        s.addCell( new Label( 6, j + 2, "Total "+f.getTotal( ),fCuerpo ) );
                        
                    }
                        
         
            
            w.write();
            w.close();

            
        } catch ( Exception e ) {
            e.printStackTrace( ) ;
            out.close( ) ;
        }
        
        return null ;
        
    }
    
}
